// package com.viprit.util.filesplit; - Not Now

import java.io.*;

/**
 * Does the binary split of the specified file.
 *
 * <p>
 * <a href=mailto:vipul_modi@usa.net>Contact Author</a>
 *
 * @author Vipul Modi
 */
public class JSplit
{
	/**
	 * Splits the specified file in to the files of specified sizes (in KB).
	 * Use the specified output filename prefix.
	 *
	 * @exception IOException error in reading the input file or writing in
	 * output file.
	 */
	public static void split(String fileName, String outFilePrefix, int size)
		throws IOException
	{
		// Open the input file stream.
		FileInputStream fin = new FileInputStream(fileName);

		// create the buffer
		byte[] buffer = new byte[1024];
		int numRead;

		// Read the input file and store it in small pieces.
		boolean done = false;
		int piece = 1;
		int numBuffersWritten = 0;
		FileOutputStream fout = new FileOutputStream(outFilePrefix+piece);

		while(!done)
		{
			try
			{
				numRead = fin.read(buffer);
				if ( numRead > 0 )
				{
					fout.write(buffer, 0, numRead);
					fout.flush();
					numBuffersWritten++;

					if ( numBuffersWritten == size )
					{
						try{ fout.close(); } catch(IOException ioe1){}
						piece++;
						fout = new FileOutputStream(outFilePrefix+piece);
						numBuffersWritten = 0;
					}
				}
				else done = true;
			}
			catch(EOFException e)
			{
				done = true;
			}
		}

		try
		{
			if ( fout != null )
				fout.close();
			fin.close();
		}
		catch(IOException ioe2)
		{
		}
	}

	public static void main(String[] args)
		throws IOException
	{
		if ( args.length < 1 ) 
		{
			System.out.println();
			System.out.println("usage :: java JSplit <inFileName> <outFilePrefix> <splitSize>");
			System.out.println();
			System.out.println("<inFileName>\t : name of the file to be splited");
			System.out.println("<outFilePrefix>\t : prefix name of the splited output files, without split count");
			System.out.println("<splitSize>\t : size of the each output file in KB");
			System.out.println();
			return;
		}

		String outFilePrefix = "JSplitedFile";
		int splitSize = 10;

		if ( args.length > 1 )
			outFilePrefix = args[1];

		if ( args.length > 2 )
			splitSize = Integer.parseInt(args[2]);

		JSplit.split(args[0], outFilePrefix, splitSize );
	}
}
